﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Terrae.Clases;
using Terrae.GUI.Contrato;
using Terrae.Logica.Comandos;
using Terrae.Logica.FabricaLogica;
using Terrae.Clases.FabricaClase;

namespace Terrae.GUI.Presentador
{
    public class PresentadorAgregarPlanta
    {
        #region Atributos

        /// <summary>
        /// Implememtación de la vista IContratoAgregarPlanta.
        /// </summary>
        private IContratoAgregarPlanta _contrato;
        private Entidad _invernadero = FabricaEntidad.NuevoInvernadero();
        private Entidad _planta = FabricaEntidad.NuevaPlanta();
        private List<Entidad> _invernaderos = new List<Entidad>();
        private Comando<List<Entidad>> _comandoI;
        private Comando<bool> _comando;

        #endregion Atributos

        #region Contructor

        /// <summary>
        /// Constructor del PresentadorAgregarPlanta que recibe la vista
        /// del AgregarPlanta.
        /// </summary>
        /// <param name="contrato"></param>
        public PresentadorAgregarPlanta(IContratoAgregarPlanta contrato)
        {
            _contrato = contrato;
        }

        #endregion Constructor

        #region Métodos

        #region Llenar Combo Invernadero

        /// <summary>
        /// Método que llena el combo de los invernaderos 
        /// que posee una persona.
        /// </summary>
        public void LlenarComboInvernadero()
        {
            (_invernadero as Invernadero).Persona = (Persona)FabricaEntidad.NuevaPersona();
            (_invernadero as Invernadero).Persona.Id = ((Persona)_contrato.Sesion["Usuario"]).Id;

            _comandoI = FabricaComando.CrearComandoListarInvernaderos(_invernadero);
            _invernaderos = _comandoI.Ejecutar();

            foreach (Entidad _invernadero1 in _invernaderos)
            {
                _contrato.Invernadero.Items.Add((_invernadero1 as Invernadero).Nombre);
            }
        }

        #endregion Llenar Combo Invernadero

        #region Agregar Planta

        /// <summary>
        /// Método que llama al comando para agregar una planta.
        /// </summary>
        public void AgregarPlanta()
        {
            (_planta as Planta).NombrePlanta = _contrato.Nombre.Text;
            (_planta as Planta).Descripcion = _contrato.Descripcion.Text;
            (_planta as Planta).Invernadero = _contrato.Invernadero.Text;

            //Obtenemos el comando de agregar la planta desde la fabrica lógica.
            _comando = FabricaComando.CrearComandoAgregarPlanta(_planta);

            if (_comando.Ejecutar())
            {
                _contrato.Mensaje1.Text = "Se agregó exitosamente su planta";
                _contrato.Mensaje1.Visible = true;
                _contrato.Nombre.Text = "";
                _contrato.Descripcion.Text = "";
            }
            else
            {
                _contrato.Mensaje.Text = "No se pudo realizar su transacción";
                _contrato.Mensaje.Visible = true;
            }
        }

        #endregion Agregar Planta

        #endregion Métodos
    }
}